iT邦幫忙

0

sui move 學習 - 從頭開始 教學 - 4

  • 分享至 

  • xImage
  •  
    // 為了增加豐富性,這邊接著增加 雜貨店 及 雜貨店老闆 兩個結構
    struct Grocery has key { id:UID, profits:Balance<SUI> } //雜貨店
    struct GroceryOwnerCapability has key { id:UID } //雜貨店老闆

雜貨店的結構中,有加入一個profits,代表雜貨店在賣了火腿跟麵包後,會將賺來的錢放在這裡。
這邊有將profits定義類型為 Balance,這裡所使用的Token為SUI。

因為有用到新的類型,所以要在上面加入 use sui::balance::Balance;

    // 常數部分 則接著新增錯誤訊息
    const EInsufficientFunds: u64 = 001; //購買時,金額不足
    const ENoProfits: u64 = 002; //老闆要從雜貨店領錢時,雜貨店沒有錢

錯誤代碼的名稱表現可以在敘述前加上E,有些也會將其完整呈現
如: Error_No_Profits ,這就依照個人喜好。

以上這些部分,在個人編寫時,也不一定是一次寫完,可以先把有用到的先編寫,等後續如果有要用到不同的結構或函數,以及調用,再來補上也可以。
在把所需要的結構及常數建立完成後,接下來開始編寫函數的部分。

module sandwich::shop {
    
    use sui::object::UID;
    use sui::balance::Balance;
    
    struct Ham has key { id:UID }
    struct Bread has key { id:UID }
    struct Sandwich has key { id:UID }
    struct Grocery has key { id:UID, profits:Balance<SUI> }
    struct GroceryOwnerCapability has key { id:UID }
    
    const HAM_PRICE: u64 = 10;
    const BREAD_PRICE: u64 = 2;
    const EInsufficientFunds: u64 = 001;
    const ENoProfits: u64 = 002;
    
    //函數
    fun init(ctx: &mut TxContext) {
        transfer::share_object(
            Grocery{id:object::new(ctx), 
            profits:balance::zero<SUI>()});
        transfer::transfer(
            GroceryOwnerCapability {id:object::new(ctx)},tx_context::sender(ctx));
    }

在sui中,使用初始一次性執行,都以init命名為主。init多半用於賦予合約部署錢包權限,讓其有權限對此合約進行操作。
後面(),為這個函數中,有需要從外部引用 結構、常數、手動輸入值 等...時,要在()內填入。

首先 ctx 是指引用物件時,我們給他一個函數中所使用的替代物,名稱可依照個人編譯習慣命名,以全小寫為主。
&mut是引用的意思,依帶入參數的用途不同而調整,有2種:

  1. &mut - 可變引用,在引用帶入參數時,有要將其值進行改變,如 我&mut我的英雄,然後在函數內幫他增加力量,此時就是需要改變。
  2. & - 不可變引用,此引用就只單純引用,不進行改變。如 我&我的劍,要將它裝備到我們英雄上,然後把他的力量加到我的英雄,但劍本身並沒有改變。
    如果都不輸入時,代表這個帶入參數是外部輸入,如 錢包地址、擁有的NFT。 非現在要部署的內容物,此時:後面是在定義其類型,有時也會將其定義為某個我們的結構。
    此處我們 &mut TxContext,代表這裡帶入的參數就是我們的錢包,讓此函數的內容與錢包做綁定。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言